package dp.jichu;

public class leetCode91_numDecodings {
    // dp[i] 表示下标为i时，表示解码的总数
    public int numDecodings(String s) {
        if(s == null) return 0;
        if(s.charAt(0) == '0'){
            return 0;
        }
        char[] chars = s.toCharArray();
        int[] dp = new int[chars.length];
        dp[0] = 1;
        int n = s.length();
        for (int i = 1; i < n; i++) {
            int a = chars[i] - '0';
            int b = (chars[i - 1] - '0') * 10 + a;
            if(a >= 1 && a <= 9){
                dp[i] = dp[i - 1];
            }
            if(b >= 10 && b <= 26){
                if(i - 2 < 0){
                    dp[i] += 1;
                }else {
                    // 这里其实分为两步，从 获取dp[i - 2] 但凡b符合条件，a肯定符合条件，所以要把i-1也加上。
                    dp[i] += dp[i - 2];
                }
            }
        }
        return dp[s.length() - 1];
    }
}
